//
// Created by jingyuewu on 25-8-17.
//

#ifndef DEBUG_UTILS_H
#define DEBUG_UTILS_H

#include <iostream>
#include <iomanip>

// 定义spdlog的活动级别，确保所有日志级别的宏都能工作
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE

#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>

// 自动初始化spdlog的类
class SpdlogInitializer {
public:
    SpdlogInitializer() {
        try {
            // 创建默认的console logger
            auto console_logger = spdlog::stdout_color_mt("default");
            spdlog::set_default_logger(console_logger);
            
            spdlog::debug("SpdlogInitializer: Trace level enabled when compile");
            // 设置日志格式和级别
            spdlog::set_pattern("[%H:%M:%S.%e] [%^%l%$] [%n] %v");
            spdlog::set_level(spdlog::level::info);
            spdlog::info("SpdlogInitializer: Show info level");
            
            // 测试日志输出
            spdlog::info("SpdlogInitializer: Logger initialized successfully");
        } catch (const std::exception& e) {
            std::cerr << "Failed to initialize spdlog: " << e.what() << std::endl;
        }
    }

    bool set_default_logger(const std::string& name) {
        auto console_logger = spdlog::stdout_color_mt(name);
        spdlog::set_default_logger(console_logger);
        return true;
    }
    
    ~SpdlogInitializer() = default;
};

inline static SpdlogInitializer spdlog_init;

#define DEMO_INFO(...) SPDLOG_INFO(__VA_ARGS__)
#define DEMO_DEBUG(...) SPDLOG_DEBUG(__VA_ARGS__)
#define DEMO_WARN(...) SPDLOG_WARN(__VA_ARGS__)
#define DEMO_ERROR(...) SPDLOG_ERROR(__VA_ARGS__)
#define DEMO_CRITICAL(...) SPDLOG_CRITICAL(__VA_ARGS__)
#define DEMO_TRACE(...) SPDLOG_TRACE(__VA_ARGS__)
#define DEMO_FATAL(...) SPDLOG_FATAL(__VA_ARGS__)

#endif //DEBUG_UTILS_H
